﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.Specialized;
using ApplicationGenerator.CommonModule;

namespace ApplicationGenerator.CommonWeb
{
    /// <summary>
    /// Element historii
    /// </summary>
    public class WebPageHistoryElement
    {
        #region Fields
        /// <summary>
        /// Parametry w QuerryString'u
        /// </summary>
        private Dictionary<string, string> _QuerryParams;
        #endregion

        #region Properties
        /// <summary>
        /// Url do strony
        /// </summary>
        public string WebPageUrl
        {
            get;
            set;
        }
        #endregion

        #region Constructor
        /// <summary>
        /// Konstruktor
        /// </summary>
        public WebPageHistoryElement()
        {
            _QuerryParams = new Dictionary<string, string>();
        }
        #endregion

        #region Methods

        /// <summary>
        /// Inicjalizuje parametry
        /// </summary>
        /// <param name="querryParams">Parametry querry stringa</param>
        public void InitializeQuerryParams(NameValueCollection querryParams)
        {
            foreach (string querryParam in querryParams.Keys)
            {
                _QuerryParams[querryParam] = querryParams[querryParam];
            }
        }

        /// <summary>
        /// Czy strona jest domyślną
        /// </summary>
        /// <returns>Czy strona jest domyślną ?</returns>
        public bool IsDefaultPage()
        {
            return WebPageUrl.Contains("Default.aspx");
        }

        /// <summary>
        /// Czy strona workflow
        /// </summary>
        /// <returns>Czy strona workflow ?</returns>
        public bool IsWorkflowPage()
        {
            return WebPageUrl.Contains(QuerryStringConstants.WorkflowPage);
        }

        /// <summary>
        /// Czy strona relacyjna
        /// </summary>
        /// <returns></returns>
        public bool IsRelationPage()
        {
            return WebPageUrl.Contains(QuerryStringConstants.RelationPage);
        }

        /// <summary>
        /// Czy strona jest typu formularz do odczytu
        /// </summary>
        /// <returns>Czy strona jest typu formularz do odczytu ?</returns>
        public bool IsLoadFormPage()
        {
            return IsFormPage() &&
                _QuerryParams.ContainsKey(QuerryStringConstants.FormRequestType) &&
                _QuerryParams[QuerryStringConstants.FormRequestType] == QuerryStringConstants.FormRequestLoaded;
        }

        /// <summary>
        /// Czy strona jest typu nowy formularz
        /// </summary>
        /// <returns>Czy strona jest typu nowy formularz ?</returns>
        public bool IsNewFormPage()
        {
            return IsFormPage() &&
                _QuerryParams.ContainsKey(QuerryStringConstants.FormRequestType) &&
                _QuerryParams[QuerryStringConstants.FormRequestType] == QuerryStringConstants.FormRequestNew;
        }

        /// <summary>
        /// Czy strona jest typu formularz 
        /// </summary>
        /// <returns>Czy strona jest typu formularz ?</returns>
        public bool IsFormPage()
        {
            return WebPageUrl.Contains(QuerryStringConstants.FormPage);
        }

        /// <summary>
        /// Czy strona jest typu lista
        /// </summary>
        /// <returns>Czy strona jest typu lista ?</returns>
        public bool IsListPage()
        {
            return WebPageUrl.Contains(QuerryStringConstants.ListPage) &&
                _QuerryParams.ContainsKey(QuerryStringConstants.ListGuid);
        }

        /// <summary>
        /// Pobiera guid listy w reprezentacji stringowej
        /// </summary>
        /// <returns>Guid listy w reprezentacji stringowej</returns>
        public string ListGuid()
        {
            return _QuerryParams[QuerryStringConstants.ListGuid];
        }

        /// <summary>
        /// Pobiera guid formularza w reprezentacji stringowej
        /// </summary>
        /// <returns>Guid formularza w reprezentacji stringowej</returns>
        public string FormGuid()
        {
            return _QuerryParams[QuerryStringConstants.FormGuid];
        }
        #endregion
    }
}
